package com.fary.ribbon;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 在 Spring Cloud 中，可通过配置的方式使用自定义的负载策略，ribbon-config-demo 是调用的服务名称。
 * eureka-producer.ribbon.NFLoadBalancerRuleClassName=com.fary.ribbon.MyRule
 *
 * 常用配置：
 * 1. 禁用 Eureka
 * ribbon.eureka.enabled=false，当我们禁用了 Eureka 之后，就不能使用服务名称去调用接口了，必须指定服务地址。
 * 2. 配置接口地址列表
 *  禁用 Eureka 后手动配置服务地址，这个配置是针对具体服务的，前缀就是服务名称，配置完之后就可以和之前一样使用服务名称来调用接口了。
 * eureka-producer.ribbon.listOfServers=localhost:8081,localhost:8083
 * 3.超时时间
 * # 请求连接的超时时间
 * ribbon.ConnectTimeout=2000
 * # 请求处理的超时时间
 * ribbon.ReadTimeout=5000
 * 也可以为每个Ribbon客户端设置不同的超时时间, 通过服务名称进行指定：
 * eureka-producer.ribbon.ConnectTimeout=2000
 * eureka-producer.ribbon.ReadTimeout=5000
 * 4. 并发参数
 * # 最大连接数
 * ribbon.MaxTotalConnections=500
 * # 每个host最大连接数
 * ribbon.MaxConnectionsPerHost=500
 *
 * 5. RetryRule 重试
 * 最简单的方法就是利用 Ribbon 自带的重试策略进行重试，此时只需要指定某个服务的负载策略为重试策略即可：
 * eureka-producer.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RetryRule
 *
 * 6. Spring Retry 重试
 * <dependency>
 *     <groupId>org.springframework.retry</groupId>
 *     <artifactId>spring-retry</artifactId>
 * </dependency>
 * 配置重试次数等信息：
 * # 对当前实例的重试次数
 * ribbon.maxAutoRetries=1
 * # 切换实例的重试次数
 * ribbon.maxAutoRetriesNextServer=3
 * # 对所有操作请求都进行重试
 * ribbon.okToRetryOnAllOperations=true
 * # 对Http响应码进行重试
 * ribbon.retryableStatusCodes=500,404,502
 */
@Configuration
public class RibbonConfig {

    @Bean
    public MyRule rule() {
        return new MyRule();
    }
}
